﻿/** 
 *   PresentacionFicha: Ficha para la presentacion del juego.
 *  
 *   @see Presentacion Menu
 *   @author Eduardo Masia Roman
 */

/* --------------------------------------------------         
   Parte de Damas - EMR
   Versiones hasta la fecha:
   
   Num.   Fecha       Por / Cambios
   ---------------------------------------------------
   0.03  23-May-2009  Eduardo Masia
                      Creada clase.
 
 ---------------------------------------------------- */

namespace Damas
{
    class FichaGiratoria
    {
        private const byte PROPORCIONGROSOR = 5;
        
        private const byte FICHACOLORR = 0xff;
        private const byte FICHACOLORG = 0xff;
        private const byte FICHACOLORB = 0xff;

        private const byte BORDECOLORR = 0x70;
        private const byte BORDECOLORG = 0x70;
        private const byte BORDECOLORB = 0x70;

        //Movimiento por la pantalla
        private short x;
        private short y;
        private short incrX;
        private short incrY;

        //Propiedades de la ficha
        private short alto;
        private short ancho;
        private short incrAlto;
        private short altoMax;

        private bool caraArriba;

        public FichaGiratoria(short xp, short yp, short inX, short inY, short alt, short anc, short inca)
        {
            x = xp;
            y = yp;
            incrX = inX;
            incrY = inY;
            alto = alt;
            ancho = anc;
            incrAlto = inca;
            altoMax = anc;

            caraArriba = true;
        }


        public void Dibujar()
        {
            int j;

            int correccionAltura = (altoMax - alto) / PROPORCIONGROSOR;

            if (caraArriba) // Imprimimos cara arriba, borde abajo
            {
                for (j = 0; j < correccionAltura; j++) //Damos grosor a la ficha
                {
                    Hardware.ElipseRellenaRGBA(x,
                                   (short)(y - j 
                                        + (correccionAltura / 2)), //Correccion al cambiar sentido grosor
                                   ancho, alto, BORDECOLORR, BORDECOLORG, BORDECOLORB, 0xff);
                }

                // Rellenamos ficha
                Hardware.ElipseRellenaRGBA(x,
                               (short)(y - j 
                                    + (correccionAltura / 2)), //Correccion al cambiar sentido grosor
                               ancho, alto, FICHACOLORR, FICHACOLORG, FICHACOLORB, 0xff);

                // Remarcamos borde ficha
                Hardware.ElipseRGBA(x,
                               (short)(y - j
                                    + (correccionAltura / 2)), //Correccion al cambiar sentido grosor
                               ancho, alto, BORDECOLORR, BORDECOLORG, BORDECOLORB, 0xff);
            }
            else // Imprimimos cara abajo, borde arriba
            {
                for (j = 0; j < correccionAltura; j++) //Damos grosor a la ficha
                {
                    Hardware.ElipseRellenaRGBA(x,
                                   (short)(y + j 
                                        - (correccionAltura / 2)), //Correccion al cambiar sentido grosor
                                   ancho, alto, BORDECOLORR, BORDECOLORG, BORDECOLORB, 0xff);
                }

                // Rellenamos ficha
                Hardware.ElipseRellenaRGBA(x,
                               (short)(y + j 
                                    - (correccionAltura / 2)), //Correccion al cambiar sentido grosor
                               ancho, alto, FICHACOLORR, FICHACOLORG, FICHACOLORB, 0xff);

                // Remarcamos borde ficha
                Hardware.ElipseRGBA(x,
                               (short)(y + j
                                    - (correccionAltura / 2)), //Correccion al cambiar sentido grosor
                               ancho, alto, BORDECOLORR, BORDECOLORG, BORDECOLORB, 0xff);
            }
        }


        public void Mover()
        {
            x += incrX;
            y += incrY;
            alto += incrAlto;

            if ((alto >= altoMax) || (alto <= 0))
            {
                incrAlto = (short)(-incrAlto); //Conseguimos que crezca y disminuya consecutivamente

                if (alto <= 0) //Ajustamos tamaño
                {
                    alto = 0;
                }
                else
                {
                    alto = altoMax;
                }

                if (caraArriba) //Cambiamos posicion de la cara y por tanto, del grosor
                {
                    caraArriba = false;
                }
                else
                {
                    caraArriba = true;
                }
            }
        }
    }
}
